<?php
class SaldoDAO extends GenericDAO  {

	function __construct() {
		$this->tabela["alteracao"] = array(	"id" 	=> 298,
											"nome" 	=> strtolower(substr(get_class(), 0, -3)));
	
		$this->tabela["consulta"]  = array(	"id" 	=> 308,
											"nome" 	=> "vw_" . strtolower(substr(get_class(), 0, -3)));
	}
	
	public function consultarPK($valor) {
	    $sql = "where id = :id";
	    $params['id'] = $valor;
	    return $this->consultar($sql, $params);
	}

	public function inserir($registro, $finalizarTransacao = true) {
		$res = null;
		$where = 'where saldo = 1 and conta_id = :conta';
		$params['conta'] = $registro['conta'];
		$saldoAnt = $this->consultar($where, $params);
		
		$registro['saldo_ant'] = isset($saldoAnt[0]) ? $saldoAnt[0]['saldo_atual'] : 0;
		if ($registro['dc'] == 'C') {
			$registro['saldo_atual'] = $registro['saldo_ant'] + $registro['vr_movimento'];
		} else {
			$registro['saldo_atual'] = $registro['saldo_ant'] - $registro['vr_movimento'];
		}
		if (isset($saldoAnt[0])) {
			$sql = "update saldo set saldo = 'N' where conta = :conta";
			$this->execSQL($sql, $params, false, false);
		}
		
		if ($this->inserirRegistro($registro, $finalizarTransacao)) {
			$res = $registro;
			$res['id'] = $this->ultimoId();
		}
		return $res;
	}
	
	public function excluir($id, $finalizarTransacao = true) {
		$pk['id'] = $id;
		return $this->excluirRegistro($pk, $finalizarTransacao);	
	}
	
	public function alterar($registro, $finalizarTransacao = true) {
		$pk['id'] 		= $registro['id'];
		unset($registro['id']);
		return $this->alterarRegistro($registro, $pk, $finalizarTransacao);
	}

	public function consultarExtrato($conta, $dt_ini, $dt_fim) {
		$where = "where conta_id = :conta and dt_data between :dt_ini and :dt_fim order by dt_data";
		$params['conta'] = $conta;
		
		$data = explode("/", $dt_ini);
		$params['dt_ini'] = $data[2] . "-" . $data[1] . "-" . $data[0];
		
		$data = explode("/", $dt_fim);
		$params['dt_fim'] = $data[2] . "-" . $data[1] . "-" . $data[0];
		return $this->consultar($where, $params);
	}
	
	public function consultarSaldos($data) {
		$sql = "select s1.* from vw_saldo s1 inner join (select conta_id, max(id) id from vw_saldo where dt_data <= :data group by conta_id) s2 on s1.id = s2.id";
		
		$dt = explode("/", $data);
		$params['data'] = $dt[2] . "-" . $dt[1] . "-" . $dt[0] . " 23:59:59";
		return $this->execQuery($sql, $params);
	}
	
	public function importarRegistro($registro, $finalizarTransacao = true) {
		$sql = "insert into saldo (conta, vr_movimento, historico, dc, saldo_atual, data, saldo_ant, saldo" .
			   ") values (" .
			   ":conta, :vr_movimento, :historico, :dc, :saldo_atual, :data, :saldo_ant, :saldo)";

		return $this->execSQL($sql, $registro, $finalizarTransacao, false);
	}
}
?>